package cn.mzy.tran;

import org.apache.rocketmq.client.producer.TransactionMQProducer;
import org.apache.rocketmq.client.producer.TransactionSendResult;
import org.apache.rocketmq.common.message.Message;

import java.nio.charset.StandardCharsets;

public class Producer {

    public static void main(String[] args) throws Exception {

        TranListener tranListener = new TranListener();

        // 1.创建一个默认的生产者对象，并设置生产者组名
        TransactionMQProducer producer = new TransactionMQProducer("tran_group_name");

        // 2.设置事务监听器
        producer.setTransactionListener(tranListener);

        // 3.设置NameServer的地址
        producer.setNamesrvAddr("localhost:9876");

        // 4.启动Producer实例
        producer.start();

        // 4.创建消息，并指定Topic，Tag和消息体  JSON
        Message msg = new Message("order-tran-topic" /* Topic */,
                "pet-tran-tag" /* Tag */,
                "单向消息".getBytes(StandardCharsets.UTF_8)
        );

        // rocketmq的业务异步跟消息的同步有没有关系？
        // 同步消息：必须等待响应结果拿到了才能执行后续代码
        // 异步消息：不管是否拿到响应结果，继续执行下一句代码
        // 单向消息：只管发，不管消息是否成功，也就是没有响应

        // 5.发送同步消息
        TransactionSendResult transactionSendResult = producer.sendMessageInTransaction(msg, "无所谓，猥琐无！！！");
        System.out.println("发送消息成功!!!" + transactionSendResult.getSendStatus());

        // 7.如果不再发送消息，关闭Producer实例。
        producer.shutdown();
    }

}